Hyrje
Ajo cfare kemi trajtuar deri me tani si shkrimi i kodit ne forme proceduriale, apo thirrjet direkte te funksioneve njihet ndryshe si programim i strukturuar ku pjese te ndryshme funksionale bashkohen per te dhene nje program kompleks. Duke perdorur nje menyre te tille programimi, fillon rritet veshtiresia per te kuptuar dhe mirembajtur kodin ne momentin qe rreshtat e kodit rriten vazhdimisht. Nje menyre e tille programimi nuk eshte shume fleksibel dhe na e ben me te veshtire zgjerueshmerine e aplikacioneve per te shtuar pjese apo module te reja. Per te lehtesuar problemet e mesiperme vjen ne dizpozicion nje metode e re programimi e quajtur Programim i Orientuar ne Objekte, POO (ang. Object-oriented programming ose shkurtimisht OOP) .
Ne ambjentin tone te perditshem te jeteses shohim veten te rrethuar nga objekte te tipeve te ndryshme p.sh. shtepia, karrigia, dielli, makina etj. Po ashtu edhe vete nje objekt si makina eshte i perbere nga objekte edhe me te vogla si rrotat, xhamat, timoni etj. Cdo objekt ne univers ka atributet dhe sjelljet e tij (veprimet dhe sherbimet qe mund ti behen ose mund te beje). P.sh. nje makine ka si atribut ngjyren, madhesine, shpejtesine etj. dhe sjelljet e saj jane qe ne te mund te futet nje njeri, mund te ngitet nga nje njeri, mund te mbaje disa njerez, mund te frenoje etj. Mbi keto koncepte eshte ngritur edhe programimi i orientuar ne objekte, ku e konsideron cdo gje si nje objekt, dhe e nderton nje aplikacion duke perdorur keto objekte.
Ne rast se ne seksionet e meparshme folem per tipe te dhenash si integer, string, koleksionet array etj. qe mbajne te dhena ne forma te ndryshme, po ashtu nje objekt eshte nje tip kompleks te dhenash i cili mund te mbaje atributet (te cilat jane anetare te objektit, variabla specifike te tipeve te ndryshme), dhe sjelljet e tij qe jane funksione te ndryshme, veprime qe mund te kryhen mbi objektin ose qe vete objekti mund te kryeje mbi dicka tjeter.
P.sh. si do ta paraqisnim nje makine ne programet kompjuterike? Nje makine do te perbehej nga atribute (anetare) si: $shpejtesia_maksimale
, $ngjyra
, $kilometrazhi
etj. dhe nga sjelljet e saj si function jepi_gaz() {}
, function freno() {}
, function ndiz_sinjalet()
etj.
Perpara se te futemi ne detaje dhe te shpjegojme hollesisht menyren sesi funksionon POO, le te shpjegojme disa terma te rendesishme te lidhur me te:
Klase - Klasat jane nje lloj tipi te dhenash te cilat permbajne funksione lokale dhe te dhena lokale. Mund ti konsiderojme si nje fabrike per prodhimin e nje tipi te caktuar objekti. P.sh. me ane te klases me emrin
Makine
, mund te ndertojme objekte te ndryshme te cilat konsiderohen objekte te tipit Makine. Pra, nje klase mund ta konsiderojme si nje shabllon per te ndertuar shume instanca (modele) objektesh te te njejtit lloj.Objekt - Nje objekt eshte nje instance e struktures se te dhenave te percaktuar nga nje klase. Ne mund te percaktojme nje klase fillimisht dhe me pas te ndertojme shume objekte qe i perkasin kesaj klase. Objektet quhen ndryshe instanca.
Variabla anetare - Quhen variablat te cilat deklarohen brenda nje klase. Keto variabla quhen atribute te objektit pasi te kemi krijuar nje objekt.
Funksione anetare - Jane funksionet qe deklarohen brenda nje klase, dhe perdoren per te aksesuar te dhenat e objektit. Ndryshe i quajme metoda.
Trashegimia - Ne POO klasat mund te trashegohen. Kur nje klase percaktohet duke trasheguar funksionalitetet ekzistuese te nje klase prind ne kete rast e quajme trashegimi. Ne kete rast klasa femije do te trashegoje (do te kete mundesi t'i perdore) te gjitha ose vetem nje pjese te funksioneve dhe variablave anetare te klases prind.
Klase prind - Nje klase qe trashegohet nga nje klase tjeter quhet klase prind. Mund te quhet edhe klasa baze ose superklase.
Klase femije - Nje klase qe trashegon nje klase tjeter quhet klase femije. Mund te quhet ndryshe nenklase ose klasa e derivuar.
Polimorfizmi - Pershkruan nje model ne POO ne te cilin klasat kane funksionalitete te ndryshme, edhe pse ndajne te njejten nderfaqe. Nje nderfaqe eshte nje shabllon qe percakton cfare lloj funksionesh duhet te kete nje klase, e cila implementon kete nderfaqe. Klasa te ndryshme te cilat implementojne kete nderfaqe jane te detyruara t'i deklarojne dhe t'i implementojne te gjitha funksionet e percaktuara nga nderfaqja. Edhe pse klasat e ndryshme implementojne (ndajne) te njejten nderfaqe dhe jane te detyruara te deklarojne funksionet anetare te percaktuara nga nderfaqja, ato mund ti deklarojne keto funksione qe te kryejne pune sipas nevojave te tyre. Ne kete rast edhe pse ndajne te njejten nderfaqe, klasat kane funksionalitete te ndryshme dhe kjo perben polimorfizmin.
Enkapsulimi - Percaktimi i dukshmerise (disponueshmerise, vizualitetit) i variablave apo funksioneve anetare te nje klase. Kur ne ndertojme nje klase duhet te kemi te qarta se cilat varibla apo funksione do te mund te aksesohen jashte kesaj klase dhe cilat duhet te jene te aksesueshme vetem brenda klases. Ky fenomen ku ne mund te vendosim aksese te ndryshme per variablat apo funksionet anetare te nje klase quhet enkapsulim.
Konstruktor - I referohet nje funksioni special te nje klase i cili do te therritet automatikisht sa here qe ne krijojme nje objekt te ri te nje klase.
Destruktor - I referohet nje funksioni special te nje klase i cili do te therritet automatikisht sa here qe ne fshijme nje objekt te nje klase.